#pragma once

#include<iostream>
#include<string>
#include<jsoncpp/json/json.h>

using namespace std;

//定制协议
//请求格式
typedef struct request
{
    int _x;
    int _y;
    char _op;
}request_t;

//响应格式
typedef struct response
{
    int _code; //server计算完的状态
    int _result; //计算结果
}response_t;


//序列化
string SerializeRequest(const request_t& req)
{
    Json::Value root; //可以承装任何对象 json是kv序列化方案
    root["datax"]=req._x;
    root["datay"]=req._y;
    root["operator"]=req._op;

    Json::FastWriter writer;
    string json_string=writer.write(root);
    return json_string;
}

//反序列化
void DeserializeRequset(const string& json_string, request_t &out)
{
    Json::Reader reader;
    Json::Value root;

    reader.parse(json_string,root);
    out._x=root["datax"].asInt();
    out._y=root["datay"].asInt();
    out._op=(char)root["operator"].asInt();
}

//响应
string SerializeResponse(const response_t& resp)
{
    Json::Value root;
    root["code"]=resp._code;
    root["result"]=resp._result;
    Json::FastWriter writer;
    string res=writer.write(root);
    return res;
}

void DeserializeResponse(string& json_string,response_t &out)
{
    Json::Reader reader;
    Json::Value root;
    reader.parse(json_string,root);
    out._code=root["code"].asInt();
    out._result=root["result"].asInt();
}